GdkWindowObject *private = (GdkWindowObject *)drawable;
GdkRegion *clip;
+ if (private->window_type == GDK_WINDOW_ROOT)
+ return;
+
if (_gdk_gc_get_subwindow (gc) == GDK_CLIP_BY_CHILDREN)
clip = private->clip_region_with_children;
else
gint toplevel_y,
GdkModifierType mask,
guint32 time_,
- GdkEvent *event_in_queue,
- gboolean before_event)
+ GdkEvent *event_in_queue)
{
GdkEvent *event;
guint32 event_mask;
if (window->event_mask & event_mask)
{
- event = _gdk_make_event ((GdkWindow *)window, type, event_in_queue, before_event);
+ event = _gdk_make_event ((GdkWindow *)window, type, event_in_queue, TRUE);
event->crossing.time = time_;
event->crossing.subwindow = subwindow;
if (subwindow)
gint toplevel_y,
GdkModifierType mask,
guint32 time_,
- GdkEvent *event_in_queue,
- gboolean before_event)
+ GdkEvent *event_in_queue)
{
GdkWindowObject *c;
GdkWindowObject *win, *last, *next;
NULL,
toplevel_x, toplevel_y,
mask, time_,
- event_in_queue, before_event);
+ event_in_queue);
if (c != a)
{
(GdkWindow *)last,
toplevel_x, toplevel_y,
mask, time_,
- event_in_queue, before_event);
+ event_in_queue);
last = win;
win = win->parent;
(GdkWindow *)next,
toplevel_x, toplevel_y,
mask, time_,
- event_in_queue, before_event);
+ event_in_queue);
}
g_list_free (path);
}
NULL,
toplevel_x, toplevel_y,
mask, time_,
- event_in_queue, before_event);
+ event_in_queue);
}
}
display->pointer_info.toplevel_y,
display->pointer_info.state,
GDK_CURRENT_TIME,
- NULL, FALSE);
+ NULL);
set_window_under_pointer (display, new_window_under_pointer);
}
}
GDK_CROSSING_NORMAL,
toplevel_x, toplevel_y,
state, time_,
- source_event, source_event->type == GDK_LEAVE_NOTIFY);
+ source_event);
set_window_under_pointer (display, pointer_window);
}
* when grabbing.
*/
- /* Some grab in another window (by perhaps another client) did a grab.
- * The pointer is still in this window, but we won't get told if it
- * moves out, so NULL this now and set it back to the right value at
- * ungrab time.
- */
- if (event->type == GDK_LEAVE_NOTIFY &&
- event->crossing.mode == GDK_CROSSING_GRAB)
- {
- g_assert (display->pointer_info.toplevel_under_pointer == event_window);
- g_object_unref (display->pointer_info.toplevel_under_pointer);
- display->pointer_info.toplevel_under_pointer = NULL;
- }
-
/* We ended up in this window after some (perhaps other clients)
grab, so update the toplevel_under_window state */
if (event->type == GDK_ENTER_NOTIFY &&
if (event->type == GDK_ENTER_NOTIFY &&
event->crossing.detail != GDK_NOTIFY_INFERIOR)
{
- g_assert (display->pointer_info.toplevel_under_pointer == NULL);
+ if (display->pointer_info.toplevel_under_pointer)
+ g_object_unref (display->pointer_info.toplevel_under_pointer);
display->pointer_info.toplevel_under_pointer = g_object_ref (event_window);
}
else if (event->type == GDK_LEAVE_NOTIFY &&
- event->crossing.detail != GDK_NOTIFY_INFERIOR)
+ event->crossing.detail != GDK_NOTIFY_INFERIOR &&
+ display->pointer_info.toplevel_under_pointer == event_window)
{
- g_assert (display->pointer_info.toplevel_under_pointer == event_window);
- g_object_unref (display->pointer_info.toplevel_under_pointer);
+ if (display->pointer_info.toplevel_under_pointer)
+ g_object_unref (display->pointer_info.toplevel_under_pointer);
display->pointer_info.toplevel_under_pointer = NULL;
}